package sifeap.pl.managedbean.reportes;

import java.io.ByteArrayInputStream;
import java.util.Date;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import sifeap.bl.ejb.reportes.ReporteBLLocal;
import sifeap.entities.usuarios.valueobject.UsuarioVO;
import sifeap.exception.SifeapException;
import sifeap.pl.managedbean.usuarios.LoginManagedBean;
import sifeap.pl.util.FacesUtils;
import sifeap.util.Util;

@ManagedBean(name="estadoCuentaManagedBean")
@SessionScoped
public class EstadoCuentaManagedBean {
	private final String MENSAJES_BUNDLE = "sifeap.pl.bundles.mensajes";
	
	private String cedula;
	private Date fechaInicio;
	private Date fechaFin;
	
	@EJB
	private ReporteBLLocal reporteBL;

	@PostConstruct
	public void inicializar() {
		cargarDatosPredeterminados();
	}
	
	public Date getFechaInicio() {
		return fechaInicio;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public Date getFechaFin() {
		return fechaFin;
	}

	public void setFechaFin(Date fechaFin) {
		this.fechaFin = fechaFin;
	}
	
	public String getCedula() {
		return cedula;
	}

	public void setCedula(String cedula) {
		this.cedula = cedula;
	}
			
	private void cargarDatosPredeterminados() {
		//Inicializa los objetos
		setFechaInicio(null);
		setFechaFin(null);
		setCedula(null);
		
		//Verifica si es un asociado
		verificarPermiso();
	}
	
	private void verificarPermiso() {
		if (LoginManagedBean.tienePermisos("rep_estado_cuenta:crear")) {
			//Tiene el permiso solo de consultar con su usuario
			UsuarioVO usuario = (UsuarioVO) FacesUtils.getSessionAttribute(LoginManagedBean.USER_LOGIN);
			if (usuario != null && usuario.getVinculado() != null) {
				setCedula(usuario.getUsuario().getNombreUsuario());
			}
		}
	}
	
	public void generarReporte() {
		try {
			if (getFechaInicio() != null && getFechaFin() != null
					&& getFechaFin().compareTo(getFechaInicio()) < 0) {
				try {
					FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.fechasnovalidas"), false);
				} catch (SifeapException em) {}
				return;
			}
			
			byte[] reporte = reporteBL.generarReporteEstadoCuenta(getCedula(), getFechaInicio(), getFechaFin());
			
			if (reporte != null) {
				if (reporte[0] == -1) {
					//El usuario no existe!
					try {
						FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.asociadonoexiste"), false);
					} catch (SifeapException em) {}
					return;
				}
				FacesUtils.enviarAlNavegador(new ByteArrayInputStream(reporte), "ReporteEstadoCuenta"+Util.obtenerCadenaFecha()+".pdf", true);
			} else {
				FacesUtils.addWarnMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.sinresultado"), false);
			}
		} catch (Exception e) {
			try {
				FacesUtils.addErrorMessage(FacesUtils.getMensaje(MENSAJES_BUNDLE, "sifeap.reportes.error"), false);
			} catch (SifeapException em) {}
			e.printStackTrace();
		}
	}
	
	public String limpiar() {
		cargarDatosPredeterminados();
		return "/web/reportes/estadoCuenta.jsf?faces-redirect=true";
	}
	
	public boolean isTienePermisos() {
		return LoginManagedBean.tienePermisos("rep_estado_cuenta:consultar","rep_estado_cuenta:crear");
	}
}